#ifndef GOBANG_H
#define GOBANG_H

#include <QMainWindow>
#include <QTimer>
#include <QLCDNumber>
#include <QStack>
#include <QPair>
#include "GameLogic.h"
#include "qipan.h"  // 棋盘类

namespace Ui
{
class GoBang;
}

class GoBang : public QMainWindow
{
    Q_OBJECT

public:
    explicit GoBang(QWidget *parent = nullptr);  // 构造函数，初始化游戏界面
    ~GoBang();  // 析构函数，清理资源
public:
    void initGameLogic();//初始化游戏逻辑
    void initTimer(); //初始化计时器
    void setupLayout(); //设置棋盘布局
    void setupUIElements(); //设置按钮等控件
    void connected();//连接信号与槽

private slots:
    void handleAiChessPosSlot(int row, int col);  // 处理AI下棋
    void handleChessClickSlots(int row, int col); // 处理玩家点击
    void start_pushbutton_clicked();  // 游戏开始按钮
    void restart_pushbutton_clicked();  // 游戏重新开始按钮
    void renege_pushbutton_clicked();  // 悔棋按钮
    void updateTimer();  // 更新时间
    void updateTimeDisplay();  // 更新时间显示

private:
    Ui::GoBang *ui;  // UI界面对象
    GameLogic *m_logic;  // 游戏逻辑对象
    qipan *m_qipan;  // 棋盘对象

    bool gameStart;  // 游戏是否开始
    bool gameOver;   // 游戏是否结束
    bool gamePaus;   // 游戏是否暂停

    QTimer *timer;  // 计时器
    int elapsedTime;  // 已用时间
    int remainingTime;  // 剩余时间（秒）

    QStack<QPair<QPair<int, int>, bool>> moveHistoryStack;  // 步骤历史
    int undoCount = 0;  // 最大悔棋次数

    void saveMove(int row, int col, bool isPlayerMove);  // 保存每一步棋的状态
};

#endif // GOBANG_H
